import fetch from "node-fetch";
import puppeteer from "puppeteer";

export class webPreview extends plugin {
    constructor() {
        super({
            /** 功能名称 */
            name: 'baidu',
            /** 功能描述 */
            dsc: '群里发送网页地址，截图预览网页内容',
            /** https://oicqjs.github.io/oicq/#events */
            event: 'message',
            /** 优先级，数字越小等级越高 */
            priority: 1006,
            rule: [
                {
                    reg: '^#?百度(百科)?一下(.*)$',
                    fnc: 'baiduweb'
                },
				{
                    reg: '^#?(.*)天气$',
                    fnc: 'baiduweather'
                },
				{
                    reg: '^#网页(.*)$',
                    fnc: 'web'
                }
            ]
        })
    }
	
	async baiduweb(e) {
		let message = e.msg.replace(/#|百度(百科)?一下/g, '').trim()
		if (!message) return
		let postUrl
		if (/#?百度百科一下/.test(e.msg)) {
			postUrl = `https://baike.baidu.com/item/${message}`;
		} else {
			postUrl = `https://www.baidu.com/s?wd=${message}`;
		}
		try {
			let imageData = Buffer.from(await render(postUrl))
			
            await e.reply(segment.image(imageData))
        } catch(error) {
			e.reply('请求失败')
		}
    }
	
	async baiduweather(e) {
		let message = e.msg.replace(/#|天气/g, '').trim()
		if (!message) return
	    let postUrl = `https://weathernew.pae.baidu.com/weathernew/pc?query=${message}天气&srcid=4982&forecast=long_day_forecast`;
		try {
            const browser = await puppeteer.launch({
                headless: "new",
                args: [
                    '--disable-gpu',
                    '--disable-setuid-sandbox',
                    '--no-sandbox',
                    '--no-zygote'
                ],
                timeout: 0,
                defaultViewport: {
                    width: 1920,
                    height: 1080
                }
            })
            const page = await browser.newPage()
            await page.goto(postUrl)
			// 定义要截取的区域
            const clip = {
                x: 490,      // 区域左上角的 x 坐标
                y: 50,      // 区域左上角的 y 坐标
                width: 940,  // 区域的宽度
                height: 2510  // 区域的高度
            };
  
            const screenshotOptions = {
                type: 'jpeg', // 截图格式，默认为 png
                //fullPage: true, // 是否截取整个页面，默认为 false
				clip: clip,   // 指定截取的区域
                omitBackground: false, // 是否移除背景颜色或图片，默认为 false
                quality: 100, // 设置 JPEG 图像的质量（0-200），默认是 80
                timeout: 90000, // 设置截图操作的超时时间为30秒
                waitUntil: 'networkidle2' // 等待页面中有2个或更少的网络连接处于活动状态
                // path: `${currentDir}/help${i+1}.jpeg`, //设置encoding后不可用
            }
            const imageBuffer = await page.screenshot(screenshotOptions)
            await browser.close()
            let imageData = Buffer.from(imageBuffer)

            // 发送截图
            await e.reply(segment.image(imageData));
        } catch (error) {
            e.reply('请求失败');
        }
	}

	
	async web(e) {
		let postUrl = e.msg.replace(/#|网页/g, '').trim()
		if (!postUrl) return
		try {
		    e.reply('收到url，开始处理...',false,{ recallMsg: 10 })
			let imageData = Buffer.from(await render(postUrl))
			
            await e.reply(segment.image(imageData))
        } catch(error) {
			e.reply('请求失败')
		}
    }

	
}

async function render(url) {
    const browser = await puppeteer.launch({
        headless: "new",
        args: [
            '--disable-gpu',
            '--disable-setuid-sandbox',
            '--no-sandbox',
            '--no-zygote'
        ],
        timeout: 0,
        defaultViewport: {
            width: 1920,
            height: 1080
        }
    }).catch(error => console.error(error))
    const page = await browser.newPage()
    await page.goto(url)
  
    const screenshotOptions = {
        type: 'jpeg', // 截图格式，默认为 png
        fullPage: true, // 是否截取整个页面，默认为 false
        omitBackground: false, // 是否移除背景颜色或图片，默认为 false
        quality: 100, // 设置 JPEG 图像的质量（0-200），默认是 80
        timeout: 90000, // 设置截图操作的超时时间为30秒
        waitUntil: 'networkidle2' // 等待页面中有2个或更少的网络连接处于活动状态
        // path: `${currentDir}/help${i+1}.jpeg`, //设置encoding后不可用
    }
    const Buffer = await page.screenshot(screenshotOptions)
    await browser.close()
    return Buffer
}